<script>
    let a = 1 // 不会给window挂
    const b = 2 // 常量不允许赋值
    var c = 3 // window.c = 3
        //  b = 3
        //   alert(window.c)
        //   function test () {
        // var c = 4// 局部变量
        //      c = 4  此时是赋值，是找上一个
        //     alert(window.c)
        //     // 作用范围的链条
        //   }

    // var name = "123" => window.name = "123"
    // 先从局部变量找-如果能找到找，局部变量优先，
    // 如果找不到，往上一级寻找，找到了以上一级为准，
    // 全找不到找全局-window(浏览器的全局对象)

    // function test 声明的时候挂到了全局- 变量提升
    // 变量提升-代码运行之前，浏览器引擎会扫描所有的变量和声明函数，
    // 直接把他们挂在window上
    // 但是只有 function test() 才可以挂在全局,
    // 变量提升只提升变量，不提升赋值

    test()

    function test() {
        alert("测试")
    }
</script>